import gradio as gr
import modelscope_studio.components.antd as antd
import modelscope_studio.components.base as ms


def mount(e: gr.EventData, _state):
    _state["theme"] = e._data["theme"]
    yield _state


def fn(_state):
    theme = _state["theme"]
    color = '000/fff' if theme == 'dark' else 'fff/000'
    yield gr.update(
        value=f"https://dummyimage.com/200x100/{color}.png&text={theme}")


with gr.Blocks() as demo:
    state = gr.State({"theme": "light"})
    with ms.Application() as app:
        with antd.ConfigProvider():
            btn = antd.Button(
                "Run",
                type="primary",
                block=True,
            )
            image = antd.Image()

            app.mount(fn=mount, inputs=[state], outputs=[state])
            btn.click(fn=fn, inputs=[state], outputs=[image])

if __name__ == "__main__":
    demo.queue().launch()
